// pages/chat_AI/chat_AI.ts
import { AIService } from '../../utils/ai-service';

/**
 * AI对话页面
 */
Page({
  /**
   * 页面的初始数据
   */
  data: {
    messages: [] as any[],
    inputText: '',
    isInputFocused: false,
    isAISending: false,
    scrollTop: 0,
    quickReplies: [
      '解释这道错题',
      '为什么我答错了？',
      '有什么解题技巧？',
      '相关知识点是什么？'
    ],
    examData: null as any
  },

  aiService: null as AIService | null,

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options: any) {
    // 初始化AI服务
    this.aiService = new AIService();
    
    // 获取考试数据
    let examData = null;
    if (options.examData) {
      try {
        examData = JSON.parse(decodeURIComponent(options.examData));
        this.setData({
          examData: examData
        });
      } catch (error) {
        console.warn('解析考试数据失败:', error);
      }
    }

    // 根据是否有考试数据设置不同的欢迎消息
    let welcomeMessage;
    if (examData && examData.wrongAnswers && examData.wrongAnswers.length > 0) {
      welcomeMessage = `👋 您好！我是AI学习助手。

我看到您在考试中有 ${examData.wrongAnswers.length} 道错题，考试成绩是 ${examData.examScore} 分（正确率 ${examData.accuracy}%）。

我可以帮您：
• 分析每道错题的原因
• 详细讲解正确解题思路  
• 提供相关知识点巩固
• 给出学习建议

请选择快捷回复或直接向我提问！`;
    } else {
      welcomeMessage = `👋 您好！我是AI学习助手。

我可以帮您：
• 分析错题原因
• 讲解解题思路
• 提供学习建议
• 回答相关问题

请随时向我提问！`;
    }

    this.setData({
      messages: [
        {
          id: 'welcome',
          type: 'ai',
          content: welcomeMessage,
          timestamp: Date.now()
        }
      ]
    });

    // 初始加载后滚动到底部
    this.scrollToBottom();
  },

  /**
   * 输入框内容变化
   */
  onInputChange(event: any) {
    this.setData({
      inputText: event.detail.value
    });
  },

  /**
   * 输入框获得焦点
   */
  onInputFocus() {
    this.setData({
      isInputFocused: true
    });
  },

  /**
   * 输入框失去焦点
   */
  onInputBlur() {
    this.setData({
      isInputFocused: false
    });
  },

  /**
   * 滚动到底部
   */
  scrollToBottom() {
    // 使用nextTick确保DOM更新完成
    wx.nextTick(() => {
      // 设置一个足够大的数值让其滚动到底部
      this.setData({
        scrollTop: 99999
      });
    });
  },

  /**
   * 发送消息
   */
  async sendMessage() {
    const inputText = this.data.inputText;
    
    if (!inputText || !inputText.trim()) {
      wx.showToast({
        title: '请输入内容',
        icon: 'none',
        duration: 1000
      });
      return;
    }
    
    if (this.data.isAISending) {
      return;
    }

    // 添加用户消息
    const userMessage = {
      id: 'user_' + Date.now(),
      type: 'user',
      content: inputText.trim(),
      timestamp: Date.now()
    };

    // 清空输入框并添加消息
    this.setData({
      inputText: '',
      messages: [...this.data.messages, userMessage],
      isAISending: true
    });

    // 滚动到底部
    this.scrollToBottom();

    try {
      // 构建聊天历史
      const chatMessages = this.data.messages
        .filter((msg: any) => msg.type !== 'system')
        .map((msg: any) => ({
          role: msg.type === 'user' ? 'user' : 'assistant',
          content: msg.content
        }));

      // 添加当前用户消息
      chatMessages.push({
        role: 'user',
        content: inputText.trim()
      });

      // 构建上下文（包含考试数据）
      let context = '';
      if (this.data.examData && this.data.examData.wrongAnswers) {
        context = `用户刚完成了一次考试，以下是错题信息：\n`;
        this.data.examData.wrongAnswers.forEach((item: any, index: number) => {
          context += `\n错题${index + 1}：\n题目：${item.question}\n用户答案：${item.userAnswer}\n正确答案：${item.correctAnswer}\n`;
        });
        context += `\n考试总成绩：${this.data.examData.examScore}分，正确率：${this.data.examData.accuracy}%`;
      }

      // 调用AI服务
      const aiResponse = await this.aiService!.chatWithAI({
        messages: chatMessages,
        context: context
      });
      
      const aiMessage = {
        id: 'ai_' + Date.now(),
        type: 'ai',
        content: aiResponse.success ? aiResponse.content : '抱歉，AI服务暂时不可用。',
        timestamp: Date.now()
      };

      this.setData({
        messages: [...this.data.messages, aiMessage],
        isAISending: false
      });

      // AI回复后滚动到底部
      this.scrollToBottom();

    } catch (error) {
      console.error('AI调用失败:', error);
      
      const errorMessage = {
        id: 'ai_' + Date.now(),
        type: 'ai',
        content: '抱歉，AI服务暂时不可用。请稍后再试，或者您可以：\n\n• 检查网络连接\n• 重新提问\n• 使用快捷回复功能',
        timestamp: Date.now()
      };

      this.setData({
        messages: [...this.data.messages, errorMessage],
        isAISending: false
      });

      // 错误信息显示后滚动到底部
      this.scrollToBottom();

      wx.showToast({
        title: 'AI服务异常',
        icon: 'none',
        duration: 2000
      });
    }
  },

  /**
   * 快捷回复
   */
  onQuickReply(event: any) {
    const text = event.currentTarget.dataset.text;
    this.setData({
      inputText: text
    });
    // 自动发送快捷回复
    this.sendMessage();
  },

  /**
   * 清空聊天记录
   */
  clearChat() {
    wx.showModal({
      title: '清空聊天',
      content: '确定要清空所有聊天记录吗？',
      success: (res) => {
        if (res.confirm) {
          // 重新设置欢迎消息
          this.onLoad({ examData: this.data.examData ? encodeURIComponent(JSON.stringify(this.data.examData)) : null });
        }
      }
    });
  },

  /**
   * 返回上一页
   */
  goBack() {
    wx.navigateBack({
      fail: () => {
        wx.reLaunch({
          url: '/pages/index/index'
        });
      }
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
});